//方法一: 
package main

import (
   "fmt"
   "math/rand"
   "sort"
   "time"
)

var lerrers = []byte("abcdefghijklmnopqrstuvwxyz")

func randStr() []string {

   rand.Seed(time.Now().UnixNano())

   // 生成大于3小于26的随机数
   res := rand.Intn(23) + 3

   // 创建一个slice，保存后面生成的随机字母
   list := make([]string, 0)

   b := make([]byte, res)
   for i := range b {
      b[i] = lerrers[rand.Intn(len(lerrers))]
      list = append(list, string(b[i]))
   }
   fmt.Println("没有排序前生成的随机字母", list)

   sort.Sort(sort.Reverse(sort.StringSlice(list)))

   return list
}

func main() {

   res := randStr()
   fmt.Println("排序后的字母顺序:", res)

}





//方法二：
package main

import (
   "fmt"
   "math/rand"
   "sort"
   "time"
)

var lerrers = []byte("abcdefghijklmnopqrstuvwxyz")

type info struct {
   key   int
   value string
}


// 使用 struct 的 value 就行排序
func randStr2() {
   Info := make([]info, 0)

   rand.Seed(time.Now().UnixNano())
   res := rand.Intn(23) + 3

   b := make([]byte, res)
   for i := range b {
      b[i] = lerrers[rand.Intn(len(lerrers))]

      Info = append(Info, info{i, string(b[i])})
   }

   sort.Slice(Info, func(i, j int) bool {
      return Info[i].value > Info[j].value
   })
   for _, v := range Info {
      fmt.Println(v.value)
   }

}

func main() {
   randStr2()
}